﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdbool.h>
#include <string.h>
// 原题连接：https://leetcode.cn/problems/backspace-string-compare/
/*
题目描述：
给定 s 和 t 两个字符串，当它们分别被输入到空白的文本编辑器后，如果两者相等，返回 true 。# 代表退格字符。
注意：如果对空文本输入退格字符，文本继续为空。

 

示例 1：
输入：s = "ab#c", t = "ad#c"
输出：true
解释：s 和 t 都会变成 "ac"。

示例 2：
输入：s = "ab##", t = "c#d#"
输出：true
解释：s 和 t 都会变成 ""。

示例 3：
输入：s = "a#c", t = "b"
输出：false
解释：s 会变成 "c"，但 t 仍然是 "b"。
 

提示：
1 <= s.length, t.length <= 200
s 和 t 只含有小写字母以及字符 '#'
 

进阶：
你可以用 O(n) 的时间复杂度和 O(1) 的空间复杂度解决该问题吗？
 */

// 开始解题：
// 方法1——重构字符串

char* reBuild(char* str) {
    assert(str);
    int len = strlen(str);
    int n = 0;
    int i = 0;
    char* result = (char*)malloc((len + 1) * sizeof(char));
    if (NULL == result) {
        perror("malloc fail\n");
        exit(-1);
    }

    for (i = 0; i < len; i++) {
        if (str[i] != '#') {
            result[n] = str[i];
            n++;
        }
        else if (n > 0) {
            n--;
        }
    }
    result[n] = '\0';
    return result;
}

bool backspaceCompare(char* s, char* t) {
    assert(s && t);
    return strcmp(reBuild(s), reBuild(t)) == 0;
}


int main() {
    char str1[] = "ab#c";
    char str2[] = "ab#c";
    if (backspaceCompare(str1, str2)) {
        printf("true\n");
    }
    else {
        printf("fasle\n");
    }
    return 0;
}